package controllers;

import static play.data.Form.form;

import java.text.ParseException;
import java.util.List;

import models.Chapitre;
import models.NiveauQuestion;
import models.Question;
import models.Theme;

import play.Logger;
import play.data.DynamicForm;
import play.data.Form;
import play.mvc.Controller;
import play.mvc.Result;

import views.html.pageErreurConnexion;
import views.html.createQuestion.*;

/**
 * @author Julie
 *
 */

/**
 * @author ELN1DY
 * 
 */
public abstract class CreateQuestion extends Controller {

	/**.
	 * La fonction permet d'initialiser la création de question elle récupère
	 * la liste de tous les thèmes présents en BD
	 * 
	 * @return la vue correspondant à l'étape 1 de la création d'une question
	 */
	public static Result createQuestionInitialisation() {
		final List<Theme> allThemes = Theme.findAll();
		if (Application.estConnecte() && !Application.estEtudiant()) {
			return ok(createQuestionE1.render(allThemes));
		} else {
			return ok(pageErreurConnexion.render());
		}
	}

	/**
	 * . Permet de créer une question à partir d'un qcm Enregistrement de la
	 * page de départ renvoie vers la methode createQuestionInitialisation()
	 * 
	 * @return la vue correspondant à l'étape 1 de la création d'une question
	 */
	public static Result createQuestionViaQcmInitialisation() {
		session("retourCreerQcm", "");
		System.out.println(session().toString());
		return redirect(routes.CreateQuestion.createQuestionInitialisation());
	}
	
	/**
	 * . Permet de créer une question à partir d'un qcm Enregistrement de la
	 * page de départ renvoie vers la methode createQuestionInitialisation()
	 * 
	 * @return la vue correspondant à l'étape 1 de la création d'une question
	 */
	public static Result createQuestionViaQcmModif() {
		session("retourModifQcm", "");
		System.out.println(session().toString());
		return redirect(routes.CreateQuestion.createQuestionInitialisation());
	}

	/**.
	 * la fonction creation question étape 1 permet de récupérer : le thème, la
	 * matière et le chapitre de la question (sauvegarder dans la question q)
	 * 
	 * @return la vue correspondant à l'étape 2 de la création d'une question
	 */
	public static Result createQuestionE1() {

		if (Application.estConnecte() && !Application.estEtudiant()) {
			final DynamicForm dynamicForm = form().bindFromRequest();

			final Question q = new Question();

			session("chapitre", dynamicForm.get("chapitre").toString());
			final Chapitre chap = Chapitre.findById(Long.parseLong(session()
					.get("chapitre").trim()));
			q.setChapitre(chap);

			final Form<Question> questionForm = form(Question.class);
			return ok(createQuestionE2.render(questionForm, q));
		} else {
			return ok(pageErreurConnexion.render());
		}

	}

	/**
	 * la fonction creation question étape 2 permet de récupérer : toutes les
	 * informations concernant la question (libelle, tous les choix...)
	 * 
	 * @return la vue correspondant à l'étape 3 de la création d'une question
	 */
	public static Result createQuestionE2(final Long numChap) {

		if (Application.estConnecte() && !Application.estEtudiant()) {

			final Form<Question> filledForm = form(Question.class).bindFromRequest();
			final Question q = new Question();

			final Chapitre chap = Chapitre.findById(Long.parseLong(session().get("chapitre").trim()));
			q.setChapitre(chap);
			if (filledForm.hasErrors()) {
				return badRequest(createQuestionE2.render(filledForm, q));
			} else {
				final Question created = filledForm.get();
				System.out.println(filledForm.get().getNiveauQuestion().getLibelleNiveau());
				System.out.println(created.getCommentaire() + created.getLibelleQuestion() + created.getListeChoix().get(0).getDescriptifChoix() );
				System.out.println(created.getIdQuestion());
				created.setChapitre(chap);
				created.setNiveauQuestion(filledForm.get().getNiveauQuestion());
				created.save();
				System.out.println(created.getNiveauQuestion().getLibelleNiveau());
				return ok(createQuestionFin.render(created));
			}
		} else {
			return ok(pageErreurConnexion.render());
		}

	}

	/**
	 * la fonction submit creation question 2 permet de récupérer le niveau de
	 * la question et de finaliser la creation de la question c'est a ce moment
	 * que la question est enregistrée en base.
	 * 
	 * @return la vue correspondant au menu principal
	 * @throws ParseException 
	 */
	public static Result createQuestionSubmit(final Long idQuestion) throws ParseException {

		if (Application.estConnecte() && !Application.estEtudiant()) {
			final Question q = Question.findById(idQuestion);
			q.save();
			final StringBuilder s = new StringBuilder();
			Logger.debug("Creation question : Id = " + q.getIdQuestion()
					+ " Libelle = " + q.getLibelleQuestion() + " par user "
					+ session().get("id"));
			s.append("Votre Qustion est bien créée, le libellé est :"
					+ q.getLibelleQuestion());
			s.append("\n");
			s.append("Vous pourrez le consulter en cliquant " 
						+ "sur Lister les QCMs");
			if (session().containsKey("retourCreerQcm")) {
				session().remove("retourCreerQcm");
				return CreateQCM.step(2);
			} 
			else if (session().containsKey("retourModifQcm")) {
				session().remove("retourModifQCM");
				return ModifierQCM.step(2);
				
			}else { return Application.redirectionAccueil(s.toString()); }
		} else {
			return ok(pageErreurConnexion.render());
		}
	}

}